// Copyright © 2021 Stormbird PTE. LTD.

import Foundation
import AlphaWalletAddress

extension AlphaWallet.Ethereum.ABI {
    public static let erc721: String = """
                                       [
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "approve",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "mint",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "from",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "safeTransferFrom",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "from",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                },
                                                {
                                                   "internalType" : "bytes",
                                                   "name" : "_data",
                                                   "type" : "bytes"
                                                }
                                             ],
                                             "name" : "safeTransferFrom",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "bool",
                                                   "name" : "approved",
                                                   "type" : "bool"
                                                }
                                             ],
                                             "name" : "setApprovalForAll",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : false,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "from",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "transferFrom",
                                             "outputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "function"
                                          },
                                          {
                                             "inputs" : [],
                                             "payable" : false,
                                             "stateMutability" : "nonpayable",
                                             "type" : "constructor"
                                          },
                                          {
                                             "anonymous" : false,
                                             "inputs" : [
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "from",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "to",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "Transfer",
                                             "type" : "event"
                                          },
                                          {
                                             "anonymous" : false,
                                             "inputs" : [
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "owner",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "approved",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "Approval",
                                             "type" : "event"
                                          },
                                          {
                                             "anonymous" : false,
                                             "inputs" : [
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "owner",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : true,
                                                   "internalType" : "address",
                                                   "name" : "operator",
                                                   "type" : "address"
                                                },
                                                {
                                                   "indexed" : false,
                                                   "internalType" : "bool",
                                                   "name" : "approved",
                                                   "type" : "bool"
                                                }
                                             ],
                                             "name" : "ApprovalForAll",
                                             "type" : "event"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "owner",
                                                   "type" : "address"
                                                }
                                             ],
                                             "name" : "balanceOf",
                                             "outputs" : [
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "getApproved",
                                             "outputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "",
                                                   "type" : "address"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "owner",
                                                   "type" : "address"
                                                },
                                                {
                                                   "internalType" : "address",
                                                   "name" : "operator",
                                                   "type" : "address"
                                                }
                                             ],
                                             "name" : "isApprovedForAll",
                                             "outputs" : [
                                                {
                                                   "internalType" : "bool",
                                                   "name" : "",
                                                   "type" : "bool"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "internalType" : "uint256",
                                                   "name" : "tokenId",
                                                   "type" : "uint256"
                                                }
                                             ],
                                             "name" : "ownerOf",
                                             "outputs" : [
                                                {
                                                   "internalType" : "address",
                                                   "name" : "",
                                                   "type" : "address"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "internalType" : "bytes4",
                                                   "name" : "interfaceId",
                                                   "type" : "bytes4"
                                                }
                                             ],
                                             "name" : "supportsInterface",
                                             "outputs" : [
                                                {
                                                   "internalType" : "bool",
                                                   "name" : "",
                                                   "type" : "bool"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          },
                                          {
                                             "constant" : true,
                                             "inputs" : [
                                                {
                                                   "name" : "_owner",
                                                   "type" : "address"
                                                }
                                             ],
                                             "name" : "getBalances",
                                             "outputs" : [
                                                {
                                                   "name" : "",
                                                   "type" : "uint256[]"
                                                }
                                             ],
                                             "payable" : false,
                                             "stateMutability" : "view",
                                             "type" : "function"
                                          }
                                       ]
        """
}